# coding=utf8
# 全世界最帅的帅哥
from flask import Flask
from settings import map_config
from flask_migrate import Migrate


# 创建app的函数
def create_app(run_type):
    app = Flask(__name__)
    # 加载配置
    app.config.from_object(map_config.get(run_type))

    # 初始化SQLALCHEMY
    from comment.modules import db
    db.init_app(app)

    # 初始化redis的数据库连接
    from comment.utils.financial_redis import fr
    fr.init_app(app)

    from comment.utils.financial_logging import create_logger
    create_logger(app)

    from comment.utils.financial_mail import financial_mail
    financial_mail.init_app(app)

    from comment.utils.limiter import limiter
    limiter.init_app(app)

    # 注册认证的请求钩子
    from comment.utils.request_auth import jwt_request_auth
    app.before_request(jwt_request_auth)

    # app注册蓝图
    from financial.resources.user import user_bp
    app.register_blueprint(user_bp)
    from financial.resources.letter import letter_bp
    app.register_blueprint(letter_bp)
    from financial.resources.card import card_bp
    app.register_blueprint(card_bp)
    from financial.resources.product import product_bp
    app.register_blueprint(product_bp)
    from financial.resources.transaction import transaction_bp
    app.register_blueprint(transaction_bp)
    from financial.resources.account import account_bp
    app.register_blueprint(account_bp)

    # 初始化Migrate  初始化 flask init  flask db migrate flask db upgrade
    # 执行以上的命令，需要默认的Flask项目入口文件 省得麻烦就把入口文件名设置成app.py 或者wsgi.py
    # 如果实在不喜欢这俩名字 windows cmd 可以设置 FLASK_APP=你的入口文件名 注意不要加空格
    # powershell $echo: FLASK_APP = "你的入口文件名"  linux export FLASK_APP =
    Migrate(app, db)

    return app
